summaryrefslogtreecommitdiffstats
path: root/usr.sbin/mailwrapper
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1999-12-19 13:50:37 +0000
committerpeter <peter@FreeBSD.org>1999-12-19 13:50:37 +0000
commit05fc7a4a7253f96d77c24e07f97e9e47fc407a92 (patch)
tree1f038d19d4d1716cc7b8828a9d6122633546d59c /usr.sbin/mailwrapper
parentbfd936b18255d852c5e12341849f22d51d507448 (diff)
downloadFreeBSD-src-05fc7a4a7253f96d77c24e07f97e9e47fc407a92.zip
FreeBSD-src-05fc7a4a7253f96d77c24e07f97e9e47fc407a92.tar.gz
Import NetBSD's mailwrapper to redirect /usr/sbin/sendmail to the user's
chosen mailer. Obtained from: NetBSD
Diffstat (limited to 'usr.sbin/mailwrapper')
-rw-r--r--usr.sbin/mailwrapper/Makefile13
-rw-r--r--usr.sbin/mailwrapper/mailwrapper.8144
-rw-r--r--usr.sbin/mailwrapper/mailwrapper.c165
3 files changed, 322 insertions, 0 deletions
diff --git a/usr.sbin/mailwrapper/Makefile b/usr.sbin/mailwrapper/Makefile
new file mode 100644
index 0000000..ed1130f
--- /dev/null
+++ b/usr.sbin/mailwrapper/Makefile
@@ -0,0 +1,13 @@
+# $NetBSD: Makefile,v 1.4 1999/03/25 16:40:18 is Exp $
+
+PROG= mailwrapper
+MAN= mailwrapper.8 mailer.conf.5
+
+DPADD+= ${LIBUTIL}
+LDADD+= -lutil
+
+SYMLINKS= /usr/sbin/mailwrapper /usr/sbin/sendmail \
+ /usr/sbin/mailwrapper /usr/bin/newaliases \
+ /usr/sbin/mailwrapper /usr/bin/mailq
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/mailwrapper/mailwrapper.8 b/usr.sbin/mailwrapper/mailwrapper.8
new file mode 100644
index 0000000..eb34a12
--- /dev/null
+++ b/usr.sbin/mailwrapper/mailwrapper.8
@@ -0,0 +1,144 @@
+.\" $NetBSD: mailwrapper.8,v 1.6 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 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
+.Nx
+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 mailer.conf 5 ,
+.Xr newaliases 1 ,
+.Xr sendmail 8 .
+.Sh HISTORY
+.Nm
+appeared in
+.Nx 1.4 .
+.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 0000000..4d7d67d
--- /dev/null
+++ b/usr.sbin/mailwrapper/mailwrapper.c
@@ -0,0 +1,165 @@
+/* $NetBSD: mailwrapper.c,v 1.3 1999/05/29 18:18:15 christos 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*/
+}
OpenPOWER on IntegriCloud