summaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
authorJakob Schlyter <jakob@cvs.openbsd.org>1999-08-02 19:50:10 +0000
committerJakob Schlyter <jakob@cvs.openbsd.org>1999-08-02 19:50:10 +0000
commit972d977ef40ab648164da49544fd90fefe7ca7c3 (patch)
treec4667638d78f48c8d4c4d66306650a079f802534 /usr.sbin
parent84f9c8437b772e922966b088d1f917e491a7a7b5 (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/Makefile6
-rw-r--r--usr.sbin/mailwrapper/Makefile16
-rw-r--r--usr.sbin/mailwrapper/mailer.conf.595
-rw-r--r--usr.sbin/mailwrapper/mailwrapper.8139
-rw-r--r--usr.sbin/mailwrapper/mailwrapper.c166
-rw-r--r--usr.sbin/sendmail/src/Makefile7
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