diff options
author | Jakob Schlyter <jakob@cvs.openbsd.org> | 1999-08-02 19:50:10 +0000 |
---|---|---|
committer | Jakob Schlyter <jakob@cvs.openbsd.org> | 1999-08-02 19:50:10 +0000 |
commit | 972d977ef40ab648164da49544fd90fefe7ca7c3 (patch) | |
tree | c4667638d78f48c8d4c4d66306650a079f802534 /usr.sbin | |
parent | 84f9c8437b772e922966b088d1f917e491a7a7b5 (diff) |
Integration of mailwrapper (from NetBSD)
"The mailwrapper program is designed to replace /usr/sbin/sendmail and to
invoke an appropriate MTA instead of sendmail(8) based on configuration
information placed in /etc/mailer.conf. This permits the administrator to
configure which MTA is to be invoked on the system at run time."
OK deraadt, millert
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/Makefile | 6 | ||||
-rw-r--r-- | usr.sbin/mailwrapper/Makefile | 16 | ||||
-rw-r--r-- | usr.sbin/mailwrapper/mailer.conf.5 | 95 | ||||
-rw-r--r-- | usr.sbin/mailwrapper/mailwrapper.8 | 139 | ||||
-rw-r--r-- | usr.sbin/mailwrapper/mailwrapper.c | 166 | ||||
-rw-r--r-- | usr.sbin/sendmail/src/Makefile | 7 |
6 files changed, 421 insertions, 8 deletions
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile index 87c21a132e0..c36e6f992b5 100644 --- a/usr.sbin/Makefile +++ b/usr.sbin/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.41 1999/02/26 17:52:09 jason Exp $ +# $OpenBSD: Makefile,v 1.42 1999/08/02 19:50:06 jakob Exp $ # not yet done: catman @@ -7,8 +7,8 @@ SUBDIR= ac accton adduser amd arp bootpd bootpgw bootpef bootptest brconfig \ chown chroot config cron ctm dev_mkdb dhcp \ edquota gspa httpd inetd iostat \ - ipftest ipmon ipsend kgmon \ - kvm_mkdb lpr map-mbone mrinfo mopd mrouted mtrace mtree named \ + ipftest ipmon ipsend kgmon kvm_mkdb lpr \ + mailwrapper map-mbone mrinfo mopd mrouted mtrace mtree named \ netgroup_mkdb pkg_install portmap ppp pppd pstat pwd_mkdb \ quot quotaon rarpd rbootd rdconfig rdate repquota rmt \ rpc.bootparamd rpc.lockd rpc.pcnfsd rwhod \ diff --git a/usr.sbin/mailwrapper/Makefile b/usr.sbin/mailwrapper/Makefile new file mode 100644 index 00000000000..e5c2bf388d9 --- /dev/null +++ b/usr.sbin/mailwrapper/Makefile @@ -0,0 +1,16 @@ +# $OpenBSD: Makefile,v 1.1 1999/08/02 19:50:07 jakob Exp $ + +PROG= mailwrapper +MAN= mailwrapper.8 mailer.conf.5 + +DPADD+= ${LIBUTIL} +LDADD+= -lutil + +afterinstall: + ln -fs /usr/sbin/mailwrapper ${DESTDIR}/usr/sbin/sendmail + ln -fs /usr/sbin/mailwrapper ${DESTDIR}/usr/bin/newaliases + ln -fs /usr/sbin/mailwrapper ${DESTDIR}/usr/bin/mailq + ln -fs /usr/sbin/mailwrapper ${DESTDIR}/usr/bin/hoststat + ln -fs /usr/sbin/mailwrapper ${DESTDIR}/usr/bin/purgestat + +.include <bsd.prog.mk> diff --git a/usr.sbin/mailwrapper/mailer.conf.5 b/usr.sbin/mailwrapper/mailer.conf.5 new file mode 100644 index 00000000000..a824e09484f --- /dev/null +++ b/usr.sbin/mailwrapper/mailer.conf.5 @@ -0,0 +1,95 @@ +.\" $OpenBSD: mailer.conf.5,v 1.1 1999/08/02 19:50:07 jakob Exp $ +.\" $NetBSD: mailer.conf.5,v 1.1 1999/03/25 16:40:17 is 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. +.\" +.\" The following requests are required for all man pages. +.Dd December 16, 1998 +.Dt MAILER.CONF 5 +.Os +.Sh NAME +.Nm mailer.conf +.Nd configuration file for +.Xr mailwrapper 8 +.Sh DESCRIPTION +.Pp +The file +.Pa /etc/mailer.conf +contains a series of pairs. The first member of each pair is the name +of a program invoking +.Xr mailwrapper 8 +which is typically a symbolic link to +.Pa /usr/sbin/sendmail . +(On a typical system, +.Xr newaliases 1 +and +.Xr mailq 1 +would be set up this way.) +The second member of each pair is the name of the program to +actually execute when the first name is invoked. The file may also +contain comments, denoted by a +.Ql # +character in the first column of any line. +.Sh EXAMPLES +The following is an example of how to set up a +.Nm +file for traditional sendmail invocation behavior. +.Bd -literal +# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail +sendmail /usr/libexec/sendmail/sendmail +mailq /usr/libexec/sendmail/sendmail +newaliases /usr/libexec/sendmail/sendmail +.Ed +.Pp +This example shows how to invoke the "postfix" program in place of sendmail. +.Bd -literal +# Emulate sendmail using postfix +sendmail /usr/local/libexec/postfix/sendmail +mailq /usr/local/libexec/postfix/sendmail +newaliases /usr/local/libexec/postfix/sendmail +.Ed +.Sh FILES +.Bl -tag -width /etc/mailer.conf -compact +.It Pa /etc/mailer.conf +.El +.Sh SEE ALSO +.Xr mail 1 , +.Xr mailq 1 , +.Xr newaliases 1 , +.Xr mailwrapper 8 , +.Xr sendmail 8 +.Sh AUTHORS +Perry E. Metzger <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 "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.8 b/usr.sbin/mailwrapper/mailwrapper.8 new file mode 100644 index 00000000000..91478e7a766 --- /dev/null +++ b/usr.sbin/mailwrapper/mailwrapper.8 @@ -0,0 +1,139 @@ +.\" $OpenBSD: mailwrapper.8,v 1.1 1999/08/02 19:50:07 jakob Exp $ +.\" $NetBSD: mailwrapper.8,v 1.5 1999/03/22 18:44:01 garbled 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. +.\" +.\" The following requests are required for all man pages. +.Dd December 16, 1998 +.Dt MAILWRAPPER 8 +.Os +.Sh NAME +.Nm mailwrapper +.Nd invoke appropriate MTA software based on configuration file +.Sh SYNOPSIS +Special. See below. +.Sh DESCRIPTION +At one time, the only Mail Transfer Agent (MTA) software easily available +was +.Xr sendmail 8 . +As a result of this, most Mail User Agents (MUAs) such as +.Xr mail 1 +had the path and calling conventions expected by +.Xr sendmail 8 +compiled in. +.Pp +Times have changed, however. +On a modern system, the administrator may wish to use one of several +available MTAs. +.Pp +It would be difficult to modify all MUA software typically available +on a system, so most of the authors of alternative MTAs have written +their front end message submission programs so that they use the same +calling conventions as +.Xr sendmail 8 +and may be put into place instead of +.Xr sendmail 8 +in +.Pa /usr/sbin/sendmail . +.Pp +.Xr sendmail 8 +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 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 +.Xr sendmail 8 +helps in installing alternative MTAs, it essentially makes the +configuration of the system depend on hard installing new programs in +.Pa /usr . +This leads to configuration problems for many administrators, since +they may wish to install a new 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 MTA instead of +.Xr sendmail 8 +based on configuration information placed in +.Pa /etc/mailer.conf . +This permits the administrator to configure which MTA is to be invoked on +the system at run time. +.Sh FILES +Configuration for +.Nm +is kept in +.Pa /etc/mailer.conf . +.Pa /usr/sbin/sendmail +is typically set up as a symlink to +.Nm +which is not usually invoked on its own. +.Sh DIAGNOSTICS +.Nm +will return an error value and print a diagnostic if its configuration +file is missing or malformed, or does not contain a mapping for the +name under which +.Nm +was invoked. +.Sh SEE ALSO +.Xr mail 1 , +.Xr mailq 1 , +.Xr newaliases 1 , +.Xr mailer.conf 5 , +.Xr sendmail 8 +.Sh AUTHORS +Perry E. Metzger <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 "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 00000000000..2b6002d314b --- /dev/null +++ b/usr.sbin/mailwrapper/mailwrapper.c @@ -0,0 +1,166 @@ +/* $OpenBSD: mailwrapper.c,v 1.1 1999/08/02 19:50:08 jakob Exp $ */ +/* $NetBSD: mailwrapper.c,v 1.2 1999/02/20 22:10:07 thorpej 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. + */ + +#include <err.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <util.h> + +#define _PATH_MAILERCONF "/etc/mailer.conf" + +struct arglist { + size_t argc, maxc; + char **argv; +}; + +int main __P((int, char *[], char *[])); + +static void initarg __P((struct arglist *)); +static void addarg __P((struct arglist *, const char *, int)); +static void freearg __P((struct arglist *, int)); + +extern const char *__progname; /* from crt0.o */ + +static void +initarg(al) + struct arglist *al; +{ + al->argc = 0; + al->maxc = 10; + if ((al->argv = malloc(al->maxc * sizeof(char *))) == NULL) + err(1, "mailwrapper"); +} + +static void +addarg(al, arg, copy) + struct arglist *al; + const char *arg; + int copy; +{ + if (al->argc == al->maxc) { + al->maxc <<= 1; + if ((al->argv = realloc(al->argv, + al->maxc * sizeof(char *))) == NULL) + err(1, "mailwrapper"); + } + if (copy) { + if ((al->argv[al->argc++] = strdup(arg)) == NULL) + err(1, "mailwrapper:"); + } else + al->argv[al->argc++] = (char *)arg; +} + +static void +freearg(al, copy) + struct arglist *al; + int copy; +{ + size_t i; + if (copy) + for (i = 0; i < al->argc; i++) + free(al->argv[i]); + free(al->argv); +} + +int +main(argc, argv, envp) + int argc; + char *argv[]; + char *envp[]; +{ + FILE *config; + char *line, *cp, *from, *to, *ap; + size_t len, lineno = 0; + struct arglist al; + + initarg(&al); + for (len = 0; len < argc; len++) + addarg(&al, argv[len], 0); + + if ((config = fopen(_PATH_MAILERCONF, "r")) == NULL) + err(1, "mailwrapper: can't open %s", _PATH_MAILERCONF); + + for (;;) { + if ((line = fparseln(config, &len, &lineno, NULL, 0)) == NULL) { + if (feof(config)) + errx(1, "mailwrapper: no mapping in %s", + _PATH_MAILERCONF); + err(1, "mailwrapper"); + } + +#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) + 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, 0); + break; + } + + free(line); + } + + (void)fclose(config); + + execve(to, al.argv, envp); + freearg(&al, 0); + free(line); + err(1, "mailwrapper: execing %s", to); + /*NOTREACHED*/ +parse_error: + freearg(&al, 0); + free(line); + errx(1, "mailwrapper: parse error in %s at line %lu", + _PATH_MAILERCONF, (u_long)lineno); + /*NOTREACHED*/ +} diff --git a/usr.sbin/sendmail/src/Makefile b/usr.sbin/sendmail/src/Makefile index d15e90afe97..7a1a4f48131 100644 --- a/usr.sbin/sendmail/src/Makefile +++ b/usr.sbin/sendmail/src/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.21 1999/01/21 19:37:23 millert Exp $ +# $OpenBSD: Makefile,v 1.22 1999/08/02 19:50:09 jakob Exp $ # # OpenBSD Makefile # @@ -38,10 +38,7 @@ SRCS= alias.c arpadate.c clock.c collect.c conf.c control.c convtime.c \ savemail.c snprintf.c srvrsmtp.c stab.c stats.c sysexits.c trace.c \ udb.c usersmtp.c util.c version.c MAN= aliases.5 mailq.1 newaliases.1 sendmail.8 -LINKS= ${BINDIR}/sendmail /usr/bin/newaliases \ - ${BINDIR}/sendmail /usr/bin/mailq \ - ${BINDIR}/sendmail /usr/bin/hoststat \ - ${BINDIR}/sendmail /usr/bin/purgestat +BINDIR= /usr/libexec/sendmail BINOWN= root BINGRP= bin BINMODE=4555 |