Allow mailwrapper to use mailer.conf from localbase (respecting LOCALBASE env var if set)

Phabric:	https://reviews.freebsd.org/D412
Reviewed by:	bdrewery
MFC after:	2 weeks
Relnotes:	yes
This commit is contained in:
Baptiste Daroussin 2014-08-26 22:20:02 +00:00
parent 0b976534de
commit 24ed0a5759
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=270675
2 changed files with 20 additions and 5 deletions

View file

@ -31,7 +31,7 @@
.\" (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 August 7, 2006
.Dd August 27, 2014
.Dt MAILWRAPPER 8
.Os
.Sh NAME
@ -109,6 +109,8 @@ utility is designed to replace
and to invoke an appropriate MTA instead of
.Xr sendmail 8
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 MTA is to be invoked on
the system at run time.
@ -126,6 +128,8 @@ should be turned off in
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

View file

@ -35,6 +35,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <err.h>
#include <stdio.h>
#include <string.h>
@ -87,6 +89,8 @@ 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;
@ -98,11 +102,18 @@ main(int argc, char *argv[], char *envp[])
initarg(&al);
addarg(&al, argv[0]);
if ((config = fopen(_PATH_MAILERCONF, "r")) == NULL) {
snprintf(localmailerconf, MAXPATHLEN, "%s/etc/mail/mailer.conf",
getenv("LOCALBASE") ? getenv("LOCALBASE") : "/usr/local");
mailerconf = localmailerconf;
if ((config = fopen(localmailerconf, "r")) == NULL)
mailerconf = _PATH_MAILERCONF;
if (config == NULL && ((config = fopen(mailerconf, "r")) == NULL)) {
addarg(&al, NULL);
openlog(getprogname(), LOG_PID, LOG_MAIL);
syslog(LOG_INFO, "cannot open %s, using %s as default MTA",
_PATH_MAILERCONF, _PATH_DEFAULTMTA);
mailerconf, _PATH_DEFAULTMTA);
closelog();
execve(_PATH_DEFAULTMTA, al.argv, envp);
err(EX_OSERR, "cannot exec %s", _PATH_DEFAULTMTA);
@ -112,7 +123,7 @@ main(int argc, char *argv[], char *envp[])
for (;;) {
if ((line = fparseln(config, &len, &lineno, NULL, 0)) == NULL) {
if (feof(config))
errx(EX_CONFIG, "no mapping in %s", _PATH_MAILERCONF);
errx(EX_CONFIG, "no mapping in %s", mailerconf);
err(EX_CONFIG, "cannot parse line %lu", (u_long)lineno);
}
@ -157,6 +168,6 @@ main(int argc, char *argv[], char *envp[])
/*NOTREACHED*/
parse_error:
errx(EX_CONFIG, "parse error in %s at line %lu",
_PATH_MAILERCONF, (u_long)lineno);
mailerconf, (u_long)lineno);
/*NOTREACHED*/
}