Aditya Garg <gargaditya08@xxxxxxxx> writes: > `hostname` is a popular command available on both Linux and macOS. As > per the man-page[1], `hostname --fqdn` command returns the fully > qualified domain name (FQDN) of the system. The current Net::Domain > perl module being used in the script for the same has been quite > unrealiable in many cases. Thankfully, we now have a better check for > valid_fqdn, which does reject the invalid FQDNs given by this module > properly, but at the same time, it will result in a fallback to > 'localhost.localdomain' being used. `hostname --fqdn` has been quite > reliable (probably even more reliable than the Net::Domain module) and > before falling back to 'localhost.localdomain', we should try to use it. > Interestingly, the `hostname` command is actually used by perl modules > like Net::Domain[2] and Sys::Hostname[3] to get the hostname. So, lets > give `hostname --fqdn` a chance as well! > > [1]: https://man7.org/linux/man-pages/man1/hostname.1.html > [2]: https://github.com/Perl/perl5/blob/blead/cpan/libnet/lib/Net/Domain.pm#L88 > [3]: https://github.com/Perl/perl5/blob/blead/ext/Sys-Hostname/Hostname.pm#L93 > > Signed-off-by: Aditya Garg <gargaditya08@xxxxxxxx> > --- > v2: Avoid chomping $domain and assigning it to $maildomain if the command fails. > > git-send-email.perl | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) Looks sensible. Will queue. Thanks. > diff --git a/git-send-email.perl b/git-send-email.perl > index 55b7e00d29..511f627ba6 100755 > --- a/git-send-email.perl > +++ b/git-send-email.perl > @@ -1393,8 +1393,22 @@ sub maildomain_mta { > return $maildomain; > } > > +sub maildomain_hostname_command { > + my $maildomain; > + > + if ($^O eq 'linux' || $^O eq 'darwin') { > + my $domain = `(hostname --fqdn) 2>/dev/null`; > + if (!$?) { > + chomp($domain); > + $maildomain = $domain if valid_fqdn($domain); > + } > + } > + return $maildomain; > +} > + > sub maildomain { > - return maildomain_net() || maildomain_mta() || 'localhost.localdomain'; > + return maildomain_net() || maildomain_mta() || > + maildomain_hostname_command || 'localhost.localdomain'; > } > > sub smtp_host_string {