From: "Richard Toohey via tech" Subject: Re: smtpd mda set ORIGINAL_RECIPIENT To: gilles via tech Cc: Philipp Date: Thu, 14 Mar 2024 09:45:35 +1300 On Thu, 14 Mar 2024 at 9:10 AM, gilles via tech wrote: > March 13, 2024 7:27 PM, "Philipp" 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. > > > > > 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. 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 > > +.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) > > +.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 delivered > > > +.Xr stdin 3 > > +is completly read. completely > > > .Sh FILES > > .Bl -tag -width "/etc/mail/smtpd.confXXX" -compact > > .It Pa /etc/mail/smtpd.conf > >