threads / patch / 20773

patchpost-receive-email: do not call sendmail if no mail was generated

Subject: [PATCH] post-receive-email: do not call sendmail if no mail was generated

## tl;dr

3 messages between Aug 28, 2009 and Sep 8, 2009. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Lars Noschinski· Aug 28, 2009, 17:39 UTC · lore

contrib/hooks/post-receive-email used to call the send_mail function (and thus, /usr/sbin/sendmail), even if generate_mail returned an error. This is problematic, as the sendmail binary provided by exim4 generates an error mail if provided with an empty input.

Therefore, this commit changes post-receive-email to only call sendmail if generate_mail returned without error.

Signed-off-by: Lars Noschinski <lars@public.noschinski.de>
---
 contrib/hooks/post-receive-email |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

Obvious drawback of this solution is that the mails are kept in memory as a whole. But the mails should be small enough, so that this does not hurt.

I'm not sure how to write a test for this bug, as the hook (correctly) uses an absolute path to call sendmail.

Show changes to contrib/hooks/post-receive-email +4 −1
diff --git a/contrib/hooks/post-receive-email b/contrib/hooks/post-receive-email
index 2a66063..818a270 100755
--- a/contrib/hooks/post-receive-email
+++ b/contrib/hooks/post-receive-email
@@ -684,6 +684,9 @@ if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
 else
 	while read oldrev newrev refname
 	do
-		generate_email $oldrev $newrev $refname | send_mail
+		mail="$(generate_email $oldrev $newrev $refname)"
+		if [ $? -eq 0 ]; then
+			printf '%s' "$mail" | send_mail
+		fi
 	done
 fi
-- 
1.6.3.3
Lars Noschinski· Sep 8, 2009, 09:20 UTC · re: Lars Noschinski · lore

Re: [PATCH] post-receive-email: do not call sendmail if no mail was generated

* Lars Noschinski <lars@public.noschinski.de> [09-08-28 19:39]:
Show 9 quoted lines
> contrib/hooks/post-receive-email used to call the send_mail function
> (and thus, /usr/sbin/sendmail), even if generate_mail returned an error.
> This is problematic, as the sendmail binary provided by exim4 generates
> an error mail if provided with an empty input.
> 
> Therefore, this commit changes post-receive-email to only call sendmail
> if generate_mail returned without error.
> 
> Signed-off-by: Lars Noschinski <lars@public.noschinski.de>

Is anything wrong with this patch? Or is it just queued to be committed some time?

 - Lars.
Junio C Hamano· Sep 8, 2009, 16:57 UTC · re: Lars Noschinski · lore

Re: [PATCH] post-receive-email: do not call sendmail if no mail was generated

Lars Noschinski <lars@public.noschinski.de> writes:
Show 13 quoted lines
> * Lars Noschinski <lars@public.noschinski.de> [09-08-28 19:39]:
>> contrib/hooks/post-receive-email used to call the send_mail function
>> (and thus, /usr/sbin/sendmail), even if generate_mail returned an error.
>> This is problematic, as the sendmail binary provided by exim4 generates
>> an error mail if provided with an empty input.
>> 
>> Therefore, this commit changes post-receive-email to only call sendmail
>> if generate_mail returned without error.
>> 
>> Signed-off-by: Lars Noschinski <lars@public.noschinski.de>
>
> Is anything wrong with this patch? Or is it just queued to be committed
> some time?
It is not queued anywhere as far as I am concerned.

I was waiting for others to review the patch and nothing happened, so the patch was in limbo. Thanks for sending a reminder message I am responding to. You did the right thing when nothing happened to a patch that did not see any discussion.

You can avoid this by CC'ing people who have been involved in the past with the parts of the system you are patching in the initial posting of your patch (I am not one of them, so CC'ing me didn't help).

Here are my knee-jerk reactions to the patch after a quick glance, without thinking deeply nor looking at the other parts of the file you did not touch, but looking only at the parts shown in your patch:

 - Slurping generate_email's output into a shell variable is a bad taste.
   You said that the message is always small enough but _how_ do we know
   it?
 - If this is to save us from a quirk in some but not all implementations
   of /usr/lib/sendmail, then shouldn't the logic be made into a new
   conditional?
 - I do not see a direct link between "if generate_mail returned an error"
   and "if ... an empty input".  What if generate_mail started its output
   but then failed halfway?  We have some output so the send_mail won't be
   fed empty, but $? would be not zero, so the patch is testing a
   different condition from what the log message claims to be checking.

People who do use this script and people who have worked on it may have other more useful comments.

Thanks.

← back to recent threads