Index | Thread | Search

From:
"Omar Polo via tech" <tech@openbsd.org>
Subject:
Re: smtpd mda set ORIGINAL_RECIPIENT
To:
gilles@poolp.org
Cc:
Philipp <philipp+openbsd@bureaucracy.de>, Richard Toohey via tech <tech@openbsd.org>
Date:
Thu, 14 Mar 2024 12:46:49 +0100

Download raw body.

Thread
richardjtoohey@gmail.com wrote:
> On Thu, 14 Mar 2024 at 9:10 AM, gilles via tech <tech@openbsd.org> wrote:
> 
> > March 13, 2024 7:27 PM, "Philipp" <philipp+openbsd@bureaucracy.de> wrote:
> >
> > > Hi
> > >
> > > Someone asked for the ORIGINAL_RECIPIENT environment variable for mdas.
> > > This is set by postfix[0] and some mda (i.e. public-inbox[1]) use them
> > > to handle there mails.
> > >
> > > I have implemented this and also add some documentation for the mda
> > > interface.
> > >
> > > Philippp
> > >
> > > [0] https://www.postfix.org/local.8.html
> > > [1] https://public-inbox.org/public-inbox-mda.html
> > >
> >
> > Yes, this makes sense.
> >
> > Will commit if there's no objection.

with the typos below fixed, ok op@ as well.

a few more nitpicks though :)

> > > diff --git a/usr.sbin/smtpd/mda_unpriv.c b/usr.sbin/smtpd/mda_unpriv.c
> > > index 1d59550aead..d2e67f66164 100644
> > > --- a/usr.sbin/smtpd/mda_unpriv.c
> > > +++ b/usr.sbin/smtpd/mda_unpriv.c
> > > @@ -28,7 +28,7 @@ mda_unpriv(struct dispatcher *dsp, struct deliver
> > *deliver,
> > > const char *pw_name, const char *pw_dir)
> > > {
> > > int idx;
> > > - char *mda_environ[11];
> > > + char *mda_environ[12];
> > > char mda_exec[LINE_MAX];
> > > char mda_wrapper[LINE_MAX];
> > > const char *mda_command;
> > > @@ -54,6 +54,7 @@ mda_unpriv(struct dispatcher *dsp, struct deliver
> > *deliver,
> > > xasprintf(&mda_environ[idx++], "PATH=%s", _PATH_DEFPATH);
> > > xasprintf(&mda_environ[idx++], "DOMAIN=%s", deliver->rcpt.domain);
> > > xasprintf(&mda_environ[idx++], "HOME=%s", pw_dir);
> > > + xasprintf(&mda_environ[idx++], "ORIGINAL_RECIPIENT=%s@%s",
> > deliver->rcpt.user,
> > > deliver->rcpt.domain);
> > > xasprintf(&mda_environ[idx++], "RECIPIENT=%s@%s", deliver->dest.user,
> > deliver->dest.domain);
> > > xasprintf(&mda_environ[idx++], "SHELL=/bin/sh");
> > > xasprintf(&mda_environ[idx++], "LOCAL=%s", deliver->rcpt.user);
> > > diff --git a/usr.sbin/smtpd/smtpd.conf.5 b/usr.sbin/smtpd/smtpd.conf.5
> > > index 257ad172dc4..cf5e7b261f6 100644
> > > --- a/usr.sbin/smtpd/smtpd.conf.5
> > > +++ b/usr.sbin/smtpd/smtpd.conf.5
> > > @@ -1113,6 +1113,30 @@ For example, with recipient
> > > .It %{rcpt} Ta expands to Dq user+t:g@example.org
> > > .It %{rcpt:raw} Ta expands to Dq user+t?g@example.org
> > > .El
> > > +.Ss MDA ENVIRONMENT
> > > +When a MDA is invoced smtpd will create a new process.

I wonder if it should markup smtpd as well

	When a MDA is invoked,
	.Xr smtpd 8
	will create a new process.

(also a bit unsure about the exact wording, but since we don't have any
documentation on MDAs, better get this in the tree first and then
bikeshed later about it :-)

> Invoked?
> 
> >
> > > +Only the uid and gid of the destination user is set.
> > > +The following environment variables will be set:
> > > +.Bl -tag -width "ORIGINAL_RECIPIENT"
> > > +.It Ev DOMAIN
> > > +The recipient domain

nit: i'd terminate all the descriptions with a full stop.

> > > +.It Ev HOME
> > > +The home directory of the destination user
> > > +.It Ev RECIPIENT
> > > +The address of the final recipient
> > > +.It Ev ORIGINAL_RECIPIENT
> > > +The address of the original recipient
> > > +.It Ev EXTENSION
> > > +The sub address of the recipient (only set when the recipient has a sub
> > address)

and maybe avoid the parenthesis here

	The sub address of the recipent, only set when there is a sub address.

or something like this.

> > > +.It Ev SENDER
> > > +The address of the sender (might be empty)
> > > +.El
> > > +.Pp
> > > +This process gets the mail piped to
> > > +.Xr stdin 3 .
> > > +A mail is considered as deliverd when the mda exit with EX_OK and

last nit: it should be

	...delivered when the mda exits with
	.Dv EX_OK
	and

> delivered
> 
> >
> > > +.Xr stdin 3
> > > +is completly read.
> 
> 
> completely
> 
> >
> > > .Sh FILES
> > > .Bl -tag -width "/etc/mail/smtpd.confXXX" -compact
> > > .It Pa /etc/mail/smtpd.conf
> >
> >