mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-01 08:27:59 +00:00
Import NetBSD's mailwrapper to redirect /usr/sbin/sendmail to the user's
chosen mailer. Obtained from: NetBSD
This commit is contained in:
parent
9e19fa4980
commit
3ae9291301
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/NetBSD/dist/; revision=54816
8
etc/mail/mailer.conf
Normal file
8
etc/mail/mailer.conf
Normal file
@ -0,0 +1,8 @@
|
||||
# $NetBSD: mailer.conf,v 1.2 1999/02/05 18:11:23 perry Exp $
|
||||
#
|
||||
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
|
||||
#
|
||||
sendmail /usr/libexec/sendmail/sendmail
|
||||
send-mail /usr/libexec/sendmail/sendmail
|
||||
mailq /usr/libexec/sendmail/sendmail
|
||||
newaliases /usr/libexec/sendmail/sendmail
|
8
etc/mailer.conf
Normal file
8
etc/mailer.conf
Normal file
@ -0,0 +1,8 @@
|
||||
# $NetBSD: mailer.conf,v 1.2 1999/02/05 18:11:23 perry Exp $
|
||||
#
|
||||
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
|
||||
#
|
||||
sendmail /usr/libexec/sendmail/sendmail
|
||||
send-mail /usr/libexec/sendmail/sendmail
|
||||
mailq /usr/libexec/sendmail/sendmail
|
||||
newaliases /usr/libexec/sendmail/sendmail
|
97
share/man/man5/mailer.conf.5
Normal file
97
share/man/man5/mailer.conf.5
Normal file
@ -0,0 +1,97 @@
|
||||
.\" $NetBSD: mailer.conf.5,v 1.2 1999/05/29 18:18:30 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.
|
||||
.\"
|
||||
.\" 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 # mark in the first column of any line.
|
||||
.Sh EXAMPLES
|
||||
The following is an example of how to set up an
|
||||
.Nm
|
||||
for traditional sendmail invocation behavior.
|
||||
.Bd -literal
|
||||
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
|
||||
sendmail /usr/libexec/sendmail/sendmail
|
||||
send-mail /usr/libexec/sendmail/sendmail
|
||||
mailq /usr/libexec/sendmail/sendmail
|
||||
newaliases /usr/libexec/sendmail/sendmail
|
||||
.Ed
|
||||
.Pp
|
||||
This example shows how to invoke the fictitious "newmail" program in
|
||||
place of sendmail.
|
||||
.Bd -literal
|
||||
# Emulate sendmail using postfix
|
||||
sendmail /usr/libexec/postfix/sendmail
|
||||
send-mail /usr/libexec/postfix/sendmail
|
||||
mailq /usr/libexec/postfix/sendmail
|
||||
newaliases /usr/libexec/postfix/sendmail
|
||||
.Ed
|
||||
.Sh FILES
|
||||
/etc/mailer.conf
|
||||
.Sh SEE ALSO
|
||||
.Xr mail 1 ,
|
||||
.Xr mailq 1 ,
|
||||
.Xr mailwrapper 8 ,
|
||||
.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.
|
13
usr.sbin/mailwrapper/Makefile
Normal file
13
usr.sbin/mailwrapper/Makefile
Normal file
@ -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>
|
144
usr.sbin/mailwrapper/mailwrapper.8
Normal file
144
usr.sbin/mailwrapper/mailwrapper.8
Normal file
@ -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.
|
165
usr.sbin/mailwrapper/mailwrapper.c
Normal file
165
usr.sbin/mailwrapper/mailwrapper.c
Normal file
@ -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*/
|
||||
}
|
Loading…
Reference in New Issue
Block a user