From: Jari Aalto <jari.aalto@cante•net>
To: git@vger•kernel.org
Subject: [PATCH] git-send-email.perl - Fix 550 EHLO argument does not match calling host
Date: Sun, 14 Mar 2010 22:33:48 +0200 [thread overview]
Message-ID: <873a02bq37.fsf_-_@jondo.cante.net> (raw)
In-Reply-To: m3y6huk7f4.fsf@localhost.localdomain
Add new functions maildomain_net(), maildomain_mta() and
maildomain(), which return FQDN where possible for use in
send_message(). The value is passed to Net::SMTP HELO/EHLO
handshake. The domain name can also be set via new --smtp-domain
option.
The default value in Net::SMTP may not get through:
Net::SMTP=GLOB(0x267ec28)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x267ec28)<<< 550 EHLO argument does not match calling host
whereas using the FQDN that matches the IP, the result is:
Net::SMTP=GLOB(0x15b8e80)>>> EHLO host.example.com
Net::SMTP=GLOB(0x15b8e80)<<< 250-host.example.com Hello host.example.com [192.168.1.7]
The maildomain*() code is based on ideas in Perl library
Test::Reporter by Graham Barr <gbarr@pobox•com> and Mark Overmeer
<mailtools@overmeer•net> released under 'the same terms as Perl
itself'.
Signed-off-by: Jari Aalto <jari.aalto@cante•net>
---
git-send-email.perl | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 70 insertions(+), 1 deletions(-)
================================
This is REVISION 5, reworked
================================
Changes as suggested by Jakub Narebski in
- http://permalink.gmane.org/gmane.comp.version-control.git/142149
diff --git a/git-send-email.perl b/git-send-email.perl
index a8887ea..f8cc222 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -64,6 +64,7 @@ git send-email [options] <file | directory | rev-list options >
--smtp-pass <str> * Password for SMTP-AUTH; not necessary.
--smtp-encryption <str> * tls or ssl; anything else disables.
--smtp-ssl * Deprecated. Use '--smtp-encryption ssl'.
+ --smtp-domain <str> * The domain name sent to HELO/EHLO handshake
--smtp-debug <0|1> * Disable, enable Net::SMTP debug.
Automating:
@@ -131,6 +132,8 @@ my $have_email_valid = eval { require Email::Valid; 1 };
my $have_mail_address = eval { require Mail::Address; 1 };
my $smtp;
my $auth;
+my $mail_domain_default = "localhost.localdomain";
+my $mail_domain;
sub unique_email_list(@);
sub cleanup_compose_files();
@@ -274,6 +277,7 @@ my $rc = GetOptions("sender|from=s" => \$sender,
"smtp-ssl" => sub { $smtp_encryption = 'ssl' },
"smtp-encryption=s" => \$smtp_encryption,
"smtp-debug:i" => \$debug_net_smtp,
+ "smtp-domain:s" => \$mail_domain,
"identity=s" => \$identity,
"annotate" => \$annotate,
"compose" => \$compose,
@@ -834,6 +838,65 @@ sub sanitize_address
}
+# Returns the local Fully Qualified Domain Name (FQDN) if available.
+#
+# Tightly configured MTAa require that a caller sends a real DNS
+# domain name that corresponds the IP address in the HELO/EHLO
+# handshake. This is used to verify the connection and prevent
+# spammers from trying to hide their identity. If the DNS and IP don't
+# match, the receiveing MTA may deny the connection.
+#
+# Here is a deny example of Net::SMTP with the default "localhost.localdomain"
+#
+# Net::SMTP=GLOB(0x267ec28)>>> EHLO localhost.localdomain
+# Net::SMTP=GLOB(0x267ec28)<<< 550 EHLO argument does not match calling host
+#
+# This maildomain*() code is based on ideas in Perl library
+# Test::Reporter::Util::_maildomain().
+
+sub maildomain_net
+{
+ eval { require Net::Domain; 1 };
+ return if $@;
+
+ my $domain = Net::Domain::domainname();
+
+ # handling as in Test::Reporter::Util::_maildomain()
+ my $maildomain = $domain
+ unless $^O eq 'darwin' && $domain =~ /\.local$/;
+
+ return $maildomain;
+}
+
+sub maildomain_mta
+{
+ eval { require Net::SMTP; 1 };
+ return if $@;
+
+ my $maildomain;
+
+ for my $host (qw(mailhost localhost)) {
+ my $smtp = Net::SMTP->new($host);
+ if (defined $smtp) {
+ my $domain = $smtp->domain;
+ $smtp->quit;
+
+ # handling as in Test::Reporter::Util::_maildomain()
+ $maildomain = $domain
+ unless $^O eq 'darwin' && $domain =~ /\.local$/;
+
+ last if $maildomain;
+ }
+ }
+
+ return $maildomain;
+}
+
+sub maildomain
+{
+ return maildomain_net() || maildomain_mta() || $mail_domain_default;
+}
+
# Returns 1 if the message was sent, and 0 otherwise.
# In actuality, the whole program dies when there
# is an error sending a message.
@@ -936,13 +999,18 @@ X-Mailer: git-send-email $gitversion
if ($smtp_encryption eq 'ssl') {
$smtp_server_port ||= 465; # ssmtp
require Net::SMTP::SSL;
- $smtp ||= Net::SMTP::SSL->new($smtp_server, Port => $smtp_server_port);
+ $mail_domain ||= maildomain();
+ $smtp ||= Net::SMTP::SSL->new($smtp_server,
+ Hello => $mail_domain,
+ Port => $smtp_server_port);
}
else {
require Net::SMTP;
+ $mail_domain ||= maildomain();
$smtp ||= Net::SMTP->new((defined $smtp_server_port)
? "$smtp_server:$smtp_server_port"
: $smtp_server,
+ Hello => $mail_domain,
Debug => $debug_net_smtp);
if ($smtp_encryption eq 'tls' && $smtp) {
require Net::SMTP::SSL;
@@ -965,6 +1033,7 @@ X-Mailer: git-send-email $gitversion
die "Unable to initialize SMTP properly. Check config and use --smtp-debug. ",
"VALUES: server=$smtp_server ",
"encryption=$smtp_encryption ",
+ "maildomain=$mail_domain",
defined $smtp_server_port ? "port=$smtp_server_port" : "";
}
--
1.7.0
next prev parent reply other threads:[~2010-03-14 20:34 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-10 15:57 [PATCH] Do not strip empty lines / trailing spaces from a commit message template Sebastian Schuberth
2010-03-11 8:12 ` Jeff King
2010-03-11 8:31 ` Jeff King
2010-03-11 20:46 ` Junio C Hamano
2010-03-11 22:46 ` Jeff King
2010-03-12 5:54 ` Junio C Hamano
2010-03-12 17:07 ` Sebastian Schuberth
2010-03-12 23:13 ` Junio C Hamano
2010-03-13 17:36 ` [PATCH] git-send-email.perl - Fix 550 EHLO argument does not match calling host Jari Aalto
2010-03-13 22:32 ` Junio C Hamano
2010-03-13 23:56 ` Jari Aalto
2010-03-14 6:28 ` Junio C Hamano
2010-03-14 10:19 ` Jari Aalto
2010-03-14 12:09 ` Junio C Hamano
2010-03-14 14:55 ` Jari Aalto
2010-03-14 14:59 ` Jari Aalto
2010-03-14 10:21 ` Jari Aalto
2010-03-14 11:55 ` Junio C Hamano
2010-03-14 14:41 ` Jari Aalto
2010-03-14 15:03 ` Jari Aalto
2010-03-14 13:17 ` Jakub Narebski
2010-03-14 14:52 ` Jari Aalto
2010-03-14 15:15 ` [PATCH 1/3] git-send-email.perl: improve error message in send_message() Jari Aalto
2010-03-14 15:16 ` [PATCH 2/3] git-send-email.perl: add option --smtp-debug Jari Aalto
2010-03-14 15:16 ` [PATCH 3/3] git-send-email.perl - Fix 550 EHLO argument does not match calling host Jari Aalto
2010-03-14 19:53 ` Jakub Narebski
2010-03-14 20:20 ` Jari Aalto
2010-03-14 20:33 ` Jari Aalto [this message]
-- strict thread matches above, loose matches on Subject: below --
2010-03-12 20:07 [PATCH] git-send-email.perl: improve error message in send_message() Jari Aalto
2010-03-12 21:53 ` [PATCH] git-send-email.perl: add option --smtp-debug Jari Aalto
2010-03-12 23:04 ` [PATCH] git-send-email.perl - Fix 550 EHLO argument does not match calling host Jari Aalto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=873a02bq37.fsf_-_@jondo.cante.net \
--to=jari.aalto@cante$(echo .)net \
--cc=git@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox